#include <vector>

using namespace std;

class object;
class being;
class rule;

class fact
{
	int code;
};

class propert : public fact
{
	public :
		int data;
};

class state : public fact
{
	private:
		vector<int> data;
};

class knowledge : public fact
{

};

class target : public knowledge
{
	int calc_priority(being * b);
};

class object
{
	vector<fact> facts;
	void change_states(vector<fact *> initial_states);
};

class being : public object
{
	vector<rule *> cur_target_tree;
	vector<target *> targets;
	vector<fact *> predict(vector<fact *> cur_states);
	void re_cacl_priority();
	void recalc_tree(vector<rule *> *tree, vector<fact *> states);
};

class rule : public fact
{
	int condition_codes;
	bool *condition(vector<fact *> facts);  //can't remember the word \=
	int final_state_codes;
	void *action(vector<fact *> facts);
};

int main()
{
	
	return 0;
}